﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtocoloNameSpace;

namespace HTSwitchServerNamespace.Protocols
{
    public class Protocol_GsmGps : IProtocol
    {

        #region MetodosDatosDispositivoGSM

        public bool ObteneryEnviarDatosDelDispositivo(string strMensajeDelDispositivo)
        {
            ///DECLARION DE VARIABLES
            HTSwitchServerNamespace.ar.com.horsetrack.DatosGPS objDatosGPS = new HTSwitchServerNamespace.ar.com.horsetrack.DatosGPS();
            ControlHorseData objContext = new ControlHorseData();
            ar.com.horsetrack.HorsetrackWebService webServiceHandler = new ar.com.horsetrack.HorsetrackWebService();

            ///INICIO DEL CUERPO DEL PROGRAMA

            //EJEMPLO GSM:// 359587019015786,05*827,+CENG: 0,"0706,38,0,466,97,61,f24f,03,00"+CENG: 1,"0692,31,59,????"+CENG: 2,"0702,29,63,????"+CENG: 3,"0697,22,56,????"+CENG: 4,"0704,23,61,304b"+CENG: 5,"0684,20,27,f252"+CENG: 6,"0696,20,59,f548"
            string[] strArrFields = strMensajeDelDispositivo.Split(new char[] { ',' });
            if ((strMensajeDelDispositivo.Contains("+CENG: 0") == true) && (strMensajeDelDispositivo.Contains("+CENG: 1") == true) && (strMensajeDelDispositivo.Contains("+CENG: 2") == true)) //ES VALIDO
            {
                CLogger.Append("Mensaje Valido - IMEI: " + strArrFields[0], CLogger.INFO);
                // CLogger.Append("CENG 0 = " + strArrFields[3] + " - " + strArrFields[4] + " - " + strArrFields[5] + " - " + strArrFields[6] + " - " + strArrFields[7] + " - " + strArrFields[8] + " - " + strArrFields[9] + " - " + strArrFields[10] + " - " + strArrFields[11].Substring(0,2), CLogger.INFO); //DEBUG
                // CLogger.Append("CENG 1 = " + strArrFields[12] + " - " + strArrFields[13] + " - " + strArrFields[14] + " - " +  strArrFields[15].Substring(0,4), CLogger.INFO);   //DEBUG
                // CLogger.Append("CENG 2 = " + strArrFields[16] + " - " + strArrFields[17] + " - " + strArrFields[18] + " - " + strArrFields[19].Substring(0, 4), CLogger.INFO);   //DEBUG
                // CLogger.Append("CENG 3 = " + strArrFields[20] + " - " + strArrFields[21] + " - " + strArrFields[22] + " - " + strArrFields[23].Substring(0, 4), CLogger.INFO);   //DEBUG
                // CLogger.Append("CENG 4 = " + strArrFields[24] + " - " + strArrFields[25] + " - " + strArrFields[26] + " - " + strArrFields[27].Substring(0, 4), CLogger.INFO);   //DEBUG
                // CLogger.Append("CENG 5 = " + strArrFields[28] + " - " + strArrFields[29] + " - " + strArrFields[30] + " - " + strArrFields[31].Substring(0, 4), CLogger.INFO);   //DEBUG
                // CLogger.Append("CENG 6 = " + strArrFields[32] + " - " + strArrFields[33] + " - " + strArrFields[34] + " - " + strArrFields[35].Substring(0, 4), CLogger.INFO);   //DEBUG
                //CLogger.Append("IMEI: " + strArrFields[0], CLogger.INFO);   // FD v1.00.01   //DEBUG
                objDatosGPS = objContext.obtenerDatosGSM(strArrFields); //FD v1.00.01   //DEBUG
            }
            else
            {
                throw new Exception("Error: Coordenadas GSM no válidas *********** ");
            }


            ////////////////////////////////////////////////////////////////////PLATAFORMA NUEVA ///////////////////////////////////////7//

            try
            {
                if ((objDatosGPS != null)&&(objDatosGPS.Email!=null)&&(objDatosGPS.Email!="Not defined") && (objDatosGPS.dbLatitud != null) && (objDatosGPS.dbLongitud != null))
                {
                    ar.com.controlyseguimiento.www.ControlYSeguimiento objContextControl = new ar.com.controlyseguimiento.www.ControlYSeguimiento();

                    CLogger.Append("*************************NEW PLATFORM********************", CLogger.INFO);

                    #region Validar Nueva plataforma

                    if (objContextControl.ValidateImei(objDatosGPS.strImei) == true)
                    {
                        //CLogger.Append("Imei encontrado:" + objGPSAndroidData.IMEI, CLogger.INFO);

                        if (objContextControl.IsFirstTimeActivation(objDatosGPS.Email) == true)  //AVERIGUA SI ES PRIMERA VES PARA ACTIVAR
                        {
                            if (objContextControl.FirstTimeActivation(objDatosGPS.strImei, objDatosGPS.Email) == true)  //ACTIVA POR PRIMERA VEZ
                            {
                                CLogger.Append("**NEW PLATFORM** GSMGPS Se activa por primera vez el usuario: " + objDatosGPS.Email + " con IMEI:" + objDatosGPS.strImei, CLogger.INFO);
                                //CLogger.Append("NOKIA Actualizando usuario con IMEI:" + objDatosGPS.IMEI, CLogger.INFO);
                                objContextControl.UpdateCoordinates(objDatosGPS.strImei,
                                                                    objDatosGPS.Email,
                                                                    objDatosGPS.dbLatitud.ToString(),
                                                                    objDatosGPS.dbLongitud.ToString(),
                                                                    "0",
                                                                    "0",//objDatosGPS.Alt,
                                                                    objDatosGPS.strSpeed,
                                                                    objDatosGPS.strBattery
                                                                    );
                                CLogger.Append("**NEW PLATFORM** GSMGPS Actualizo correctamente - Mail: " + objDatosGPS.Email + " - IMEI:" + objDatosGPS.strImei, CLogger.INFO);
                            }

                        }
                        else
                        {              //IMEI CORRECTO

                            objContextControl.UpdateCoordinates(objDatosGPS.strImei,
                                                                    objDatosGPS.Email,
                                                                    objDatosGPS.dbLatitud.ToString(),
                                                                    objDatosGPS.dbLongitud.ToString(),
                                                                    "0",
                                                                    "0",//objDatosGPS.Alt,
                                                                    objDatosGPS.strSpeed,
                                                                    objDatosGPS.strBattery
                                                                    );
                            CLogger.Append("**NEW PLATFORM** GSMGPS Actualizo correctamente - Mail: " + objDatosGPS.Email + " - IMEI:" + objDatosGPS.strImei, CLogger.INFO);

                        }
                    }
                    else
                    {
                        CLogger.Append("**NEW PLATFORM** GSMGPS IMEI INVALIDO - IMEI:" + objDatosGPS.strImei, CLogger.INFO);

                    }
                    #endregion
                }
                else
                {
                    CLogger.Append("**NEW PLATFORM** GSMGPS DATOS ENVIADOS EN NULL O INVALIDOS", CLogger.INFO);
                    return false;
                }
            }
            catch (Exception ex)
            {
                //throw new Exception("ERROR EN VALIDACION O CREACION DE NUEVO USUARIO" + objGPSAndroidData.Mail);
                CLogger.Append("**NEW PLATFORM** DATOS GSMGPS ERROR EN NUEVO VALIDATE: " + ex.Message, CLogger.ERROR);
            }



            ////////////////////////////////////////////////////////////////////PLATAFORMA VIEJA ///////////////////////////////////////7//

            if (webServiceHandler.actualizarDatosGPSenDB(objDatosGPS) == true)  //ACTUALIZACION DATOS EN PLATAFORMA HORSETRACK
            {
                CLogger.Append("**OLD PLATFORM** GSMGPS DATOS ACTUALIZADOS CORRECTAMENTE OK", CLogger.INFO);
            }
            else
            {
                throw new Exception("**OLD PLATFORM** DATOS GSMGPS NO SE PUDO ACTUALIZAR LA DB DE HORSETRACK");
            }
            return true;
        }
        #endregion


        #region Parse GSM
        public ar.com.horsetrack.DatosGPS Parse(DataMocks.DataMockMgr mockObject)
        {
            throw new NotImplementedException();
        }
        #endregion
    }
}
